import java.util.Scanner;
/**
 * @author benbenhuang
 * @date 2025年04月16日 14:48
 * 小红拿到了一个01串。所谓01串，指仅由'0'和'1'两种字符组成的字符串。
 * 小红可以进行任意次以下操作：
 *     选择字符串的一个字符，将其取反（'0'变'1'或者'1'变'0'）。
 * 小红定义一个01串为好串，当且仅当该01串不包含"010"子串和"101"子串。
 * 例如，"1001"是好串，但"100100"则不是好串。
 * 小红想知道，自己最少操作多少次可以将给定字符串变成好串？
 *
 * 输入描述:
 * 一个长度不超过100000的、仅由'0'和'1'组成的字符串。
 * 输出描述:
 * 一个整数，代表该字符串变成好串的最小操作次数。
 */

public class test1_MinOperationsToGoodString {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int result = getMinOperations(s);
        System.out.println(result);
        scanner.close();
    }

    public static int getMinOperations(String s) {
        int n = s.length();
        // 转换为全 0 串的操作次数
        int allZero = 0;
        // 转换为全 1 串的操作次数
        int allOne = 0;
        // 转换为以 0 开头的交替串（0101...）的操作次数
        int zeroAlternate = 0;
        // 转换为以 1 开头的交替串（1010...）的操作次数
        int oneAlternate = 0;

        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == '0') {
                allOne++;
                if (i % 2 == 0) {
                    oneAlternate++;
                } else {
                    zeroAlternate++;
                }
            } else {
                allZero++;
                if (i % 2 == 0) {
                    zeroAlternate++;
                } else {
                    oneAlternate++;
                }
            }
        }

        // 取四种情况的最小值
        return Math.min(Math.min(allZero, allOne), Math.min(zeroAlternate, oneAlternate));
    }
}